/**
 * 基于日的时间切换
 * requires jquery
 * @author sunyu 2014-10-26
 * 使用说明：在需要的页面引入dayChange.css
 * 然后在需要引入插件的地方插入<div class="dayChange"></div>
 * 例如：
 *  <div class="pre_next">
 *       <div class="dayChange"></div>
 *  </div>
 * example :
 * $(".dayChange").dayChange({
 *		callBack:loadData,
 *	    format:'yyyy-MM-dd EEE' //E表示星期
 *	});
 */
;(function(factory) {
    if (typeof define === 'function' && define.amd) {
        // AMD. Register as an anonymous module.
        define([ 'jquery.pager.js' ], factory);
    } else {
        // Browser globals
        factory(jQuery);
    }
}(function($) {
    'use strict';
    $.fn.dayChange = function(opts) {
        opts = jQuery.extend({
                setMax:false,
                setMin:false,
                startTime:0,
                format:'yyyy-MM-dd',
                callBack: function() {
                    return false
                }
            },
            opts || {});
        return this.each(function() {
            var panel = jQuery(this);
            var html = "<a href='javascript:void(0)' id='preDay'><span id='left_dire'>Pre</span></a><span id='date_text'></span><a href='javascript:void(0)' id='nextDay'><span id='right_dire'>Next</span></a>";
            panel.html(html);//附加html
            var maxTime;
            if(opts.setMax){
                maxTime = new Date().getTime();
            }else{
                maxTime = 0;
            }
            var minTime;
            if(opts.setMin){
                minTime = new Date().getTime();
            }else{
                minTime = 0;
            }
            //如过没有给插件指定开始时间则自动生成当前时间作为开始时间
            var start = parseInt(opts.startTime);
            var millis;
            if(start===0){
                millis = new Date().getTime();//获得毫秒数
            }else{
                millis = start;
            }
            writeDate(millis);//写入显示日期
            //回调
            function dayClick(time) {
                opts.callBack(time);
            }
            //写入日期
            function writeDate(time) {
                var now = new Date(time);
                var strTime = format(now,opts.format);
                $("#date_text").html(strTime);
            }
            //格式化时间
            function format(date,fmt){
                var o = {
                    "M+" : date.getMonth()+1, //月份
                    "d+" : date.getDate(), //日
                    "h+" : date.getHours()%12 == 0 ? 12 : date.getHours()%12, //小时
                    "H+" : date.getHours(), //小时
                    "m+" : date.getMinutes(), //分
                    "s+" : date.getSeconds(), //秒
                    "q+" : Math.floor((date.getMonth()+3)/3), //季度
                    "S" : date.getMilliseconds() //毫秒
                };
                var week = {
                    "0" : "\u65e5",
                    "1" : "\u4e00",
                    "2" : "\u4e8c",
                    "3" : "\u4e09",
                    "4" : "\u56db",
                    "5" : "\u4e94",
                    "6" : "\u516d"
                };
                if(/(y+)/.test(fmt)){
                    fmt=fmt.replace(RegExp.$1, (date.getFullYear()+"").substr(4 - RegExp.$1.length));
                }
                if(/(E+)/.test(fmt)){
                    fmt=fmt.replace(RegExp.$1, ((RegExp.$1.length>1) ? (RegExp.$1.length>2 ? "\u661f\u671f" : "\u5468") : "")+week[date.getDay()+""]);
                }
                for(var k in o){
                    if(new RegExp("("+ k +")").test(fmt)){
                        fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
                    }
                }
                return fmt;
            }
            //点击上一天
            $("#preDay").click(function() {
                if(minTime===0){
                    millis = millis - 864e5;
                    writeDate(millis); //写入日期
                    dayClick(millis);//调用回调(传入毫秒数)
                    return false;
                }else if(millis>=minTime){
                    millis = millis - 864e5;
                    writeDate(millis); //写入日期
                    dayClick(millis);//调用回调(传入毫秒数)
                    return false;
                }
            });
            //点击下一天
            $("#nextDay").click(function() {
                if(maxTime===0){
                    millis = millis + 864e5;
                    writeDate(millis); //写入日期
                    dayClick(millis);//调用回调(传入毫秒数)
                    return false;
                }else if((millis+864e5)<=maxTime){
                    millis = millis + 864e5;
                    writeDate(millis); //写入日期
                    dayClick(millis);//调用回调(传入毫秒数)
                    return false;
                }
            });
        });
    }
}));